# 编译器设定
CXX := g++

# 编译选项（C++17标准 + 基本警告）
CXXFLAGS := -std=c++17 -Wall -Wextra

# 添加头文件搜索路径（关键！）
CXXFLAGS += -Imath  # 让编译器在math/目录查找头文件

# 目标可执行文件
TARGET := main

 # 数学
SRC_MATH_DIR := ./cpp/math
SRCS_MATH := $(wildcard $(SRC_MATH_DIR)/*.cpp)
#几何
SRC_GEOMETRY_DIR := ./cpp/geometry
SRCS_GEOMETRY := $(wildcard $(SRC_GEOMETRY_DIR)/*.cpp)
#场景节点
SRC_SCENE_DIR := ./cpp/scene
SRCS_SCENE := $(wildcard $(SRC_SCENE_DIR)/*.cpp)
#渲染组件
SRC_RENDERER_DIR := ./cpp/renderer
SRCS_RENDERER := $(wildcard $(SRC_RENDERER_DIR)/*.cpp)
# 物理组件
SRC_PHYSICS_DIR := ./cpp/physics
SRCS_PHYSICS := $(wildcard $(SRC_PHYSICS_DIR)/*.cpp)



SRC_ROOT := ./cpp/main.cpp





SRCS := $(SRCS_MATH) $(SRCS_GEOMETRY) ${SRCS_SCENE} ${SRCS_RENDERER} ${SRCS_PHYSICS} ${SRC_ROOT}


# 生成对应的.o文件列表
OBJS := $(SRCS:.cpp=.o)

# 默认构建规则
all: $(TARGET)

# 链接生成可执行文件
$(TARGET): $(OBJS)
	$(CXX) $(CXXFLAGS) -o $@ $^

# 编译根目录的.cpp文件
%.o: %.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

# 编译子目录的.cpp文件
math/%.o: math/%.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

scene/%.o: scene/%.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@
pyhsics/%.o: pyhsics/%.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@


# 关键点说明
# CXX := g++

# 指定使用 g++ 作为 C++ 编译器（默认是 g++，但显式声明更清晰）。

# CXXFLAGS := -std=c++17 -Wall -Wextra

# -std=c++17：使用 C++17 标准。

# -Wall -Wextra：启用额外警告，帮助捕捉潜在问题。

# $(TARGET): $(SRCS)

# 直接编译 main.cpp 和 vec3.cpp，并链接生成可执行文件 my_program。

# clean 和 run

# make clean：删除生成的可执行文件。

# make run：编译后自动运行程序